﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using Biblioteca;


namespace Servicios
{
    public class conexionDB
    {
        SqlConnection con = new SqlConnection();

        /// <summary>
        /// Establece la conexion con la base de datos
        /// </summary>
        public conexionDB()
        {
            ConnectionStringSettings databaseConnectionString = ConfigurationManager.ConnectionStrings["LineadeConexion"];
            con.ConnectionString = databaseConnectionString.ConnectionString;
        }

        #region "Select con parametros"
        /// <summary>
        /// Selecionarlos campos de una tabla con parametros
        /// </summary>
        /// <param name="nombreStoreProcedure">Nombre del store procedure a buscar</param>
        /// <param name="columnsNames">Nombre de las colunmas</param>
        /// <param name="parametros">parametros a cargar</param>
        /// <returns>retorna un dataset de la tabla</returns>
        public DataSet selecFromTable(string nombreStoreProcedure, string[] columnsNames, object[] parametros)
        {
            DataSet resu = new DataSet();
            try
            {
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = nombreStoreProcedure;
                setParameters(cmd, columnsNames, parametros);
                cmd.Connection = con;
                SqlDataAdapter ada = new SqlDataAdapter(cmd);
                ada.Fill(resu);
            }
            catch (Exception)
            { }
            finally
            {
                if (con.State == ConnectionState.Open)
                    con.Close();
            }
            return resu;
        }

        #endregion

        #region "Insert con parametros"
        /// <summary>
        /// Insertar datos en la tabla
        /// </summary>
        /// <param name="nombreStoreProcedure">Nombre del store procedure a buscar</param>
        /// <param name="columnsNames">Nombre de las colunmas</param>
        /// <param name="parametros">parametros a cargar</param>
        /// <returns>retorna un dataset de la tabla</returns>
        public bool insertFromTable(string nombreStoreProcedure, string[] columnsNames, object[] parametros)
        {
            try
            {
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = nombreStoreProcedure;
                setParameters(cmd, columnsNames, parametros);
                cmd.Connection = con;
                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
            finally
            {
                if (con.State == ConnectionState.Open)
                    con.Close();
            }
        }

        #endregion

        #region "Update con parametros"
        /// <summary>
        /// Actualizar datos de la tabla
        /// </summary>
        /// <param name="nombreStoreProcedure">Nombre del store procedure a buscar</param>
        /// <param name="columnsNames">Nombre de las colunmas</param>
        /// <param name="parametros">parametros a cargar</param>
        /// <returns>retorna un dataset de la tabla</returns>
        public bool updateFromTable(string nombreStoreProcedure, string[] columnsNames, object[] parametros)
        {
            try
            {
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = nombreStoreProcedure;
                setParameters(cmd, columnsNames, parametros);
                cmd.Connection = con;
                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
            finally
            {
                if (con.State == ConnectionState.Open)
                    con.Close();
            }
        }

        #endregion

        #region "Delete con parametros"
        /// <summary>
        /// Eliminar datos de la tabla
        /// </summary>
        /// <param name="nombreStoreProcedure">Nombre del store procedure a buscar</param>
        /// <param name="columnsNames">Nombre de las colunmas</param>
        /// <param name="parametros">parametros a cargar</param>
        /// <returns>retorna un dataset de la tabla</returns>
        public bool deleteFromTable(string nombreStoreProcedure, string[] columnsNames, object[] parametros)
        {
            try
            {
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = nombreStoreProcedure;
                setParameters(cmd,columnsNames, parametros);
                cmd.Connection = con;
                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
            finally
            {
                if (con.State == ConnectionState.Open)
                    con.Close();
            }
        }
        #endregion

        private void setParameters(SqlCommand cmd, string[] columnsNames, object[] parametros)
        {
            for (int i = 0; i < parametros.Length; i++)
                cmd.Parameters.AddWithValue("@"+columnsNames[i], parametros[i]);
        }
    }
}

